package design.donkey.auto.ddl;

import java.util.Collections;
import java.util.Set;

import design.donkey.auto.ddl.dialect.DdlOperation;
import lombok.Getter;
import lombok.ToString;

/**
 * AutoDdlType
 *
 * @author zhangjiakung
 * @since 1.0.0
 */
@Getter
@ToString
public enum AutoDdlType {

    /**
     * 不执行任何操作
     */
    NONE(Collections.emptySet()),

    /**
     * 每次运行，不存在表则创建；不存在不做任何处理
     */
    CREATE(Set.of(DdlOperation.CREATE_TABLE)),

    /**
     * 每次运行，不存在表则创建；存在则比较是否需要添加新的列及索引，需要则添加；但是如果列长度及其他属性发生变化则不会变更
     */
    UPDATE(Set.of(DdlOperation.CREATE_TABLE, DdlOperation.ADD_COLUMN, DdlOperation.ADD_INDEX)),

    /**
     * 对 {@link #UPDATE} 的扩展，添加了修改列属性、修改索引名称。
     */
    MODIFY(Set.of(DdlOperation.CREATE_TABLE, DdlOperation.MODIFY_TABLE, DdlOperation.ADD_COLUMN,
        DdlOperation.MODIFY_COLUMN, DdlOperation.ADD_INDEX, DdlOperation.RENAME_INDEX)),

    /**
     * 每次运行校验是否缺少表或缺少数据，列属性是否发生变更
     */
    VALIDATE(Set.of(DdlOperation.CREATE_TABLE, DdlOperation.MODIFY_TABLE, DdlOperation.ADD_COLUMN,
        DdlOperation.MODIFY_COLUMN, DdlOperation.ADD_INDEX, DdlOperation.RENAME_INDEX));

    private final Set<DdlOperation> ddlOperations;

    AutoDdlType(Set<DdlOperation> ddlOperations) {
        this.ddlOperations = ddlOperations;
    }
}
